package proyectoFC_2_3_3.koyicabuto.funciones;

import java.util.ArrayList;
import java.util.List;

import proyectoFC_2_3_3.koyicabuto.BaseDeDatos.GruposDataBase;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Data;
import android.telephony.TelephonyManager;

/**
 * Clase en la que encontramos métodos de uso común.
 * 
 * @author jmartin
 *
 */
public class Funciones {
	
	/**
	 * Método con el que creamos un diálogo de alerta.
	 * 
	 * @param titulo
	 * @param mensaje
	 */
	public void crearDialogoAlerta(String titulo, String mensaje, Context context){
	    AlertDialog alertDialog = new AlertDialog.Builder(context).create();
	 
	    alertDialog.setTitle(titulo);
	    alertDialog.setMessage(mensaje);
	    alertDialog.setButton("OK", new OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	        }
	    });
	    alertDialog.show();	 
	}
	
	/**
	 * Método con el que creamos un diálogo de alerta.
	 * 
	 * @param titulo
	 * @param mensaje
	 */
	public AlertDialog crearDialogoAlertaDevuelve(String titulo, String mensaje, Context context){
	    AlertDialog alertDialog = new AlertDialog.Builder(context).create();
	 
	    alertDialog.setTitle(titulo);
	    alertDialog.setMessage(mensaje);
	    alertDialog.setButton("OK", new OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	        }
	    });
	    return alertDialog;	 
	}
	
	/**
	 * Metodo con el que obtenemos el numero de telefono del terminal.
	 * @param activity
	 * @return
	 */
	public String obtenerNumeroTelefono(Activity activity){
		TelephonyManager mTelephonyManager;
		mTelephonyManager = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);
		
		return mTelephonyManager.getLine1Number();
	}
	
	public int obtenerIdGrupo(Activity activity, String nombreGrupo){
		int idGrupo = 0;
		String selectGrupo = "SELECT _id FROM GRUPOS WHERE GR_NOMBRE = ? ";
		String[] parametros = new String[]{nombreGrupo};
  	  
		GruposDataBase  gruposDataBaseHelper = new GruposDataBase(activity, "GruposDataBase", null, 1);
		SQLiteDatabase gruposDataBase = gruposDataBaseHelper.getReadableDatabase();	
		  
		try{
			if(gruposDataBase != null){
				Cursor cursor = gruposDataBase.rawQuery(selectGrupo, parametros);
				if(cursor.moveToFirst()){
					do{
						idGrupo = cursor.getInt(0);
					}while(cursor.moveToNext());
				}
				gruposDataBase.close();
			}			
			
		}catch (Exception e) {
			System.out.println("Excepcion en obtenerIdGrupo: " + e.getMessage());
		}
		
		return idGrupo;
	}
	
	/**
	 * Metodo con el que obtenemos las coordenadas de la persona del grupo en la que hemos picado, las coordenadas
	 * se obtienen de l BB.DD
	 * @param snippet
	 * @return
	 */
	public double[] obtenerCoordenadasContacto(String snippet, Context context){
		//Consultamos a la BB.DD la latitud y longitud de la persona del grupo en la que hemos pinchado.
		double longitud = 0;
		double latitud = 0;	
		String selectGrupo = null;
		String[] parametros = null;
		
		// * [0] = longitud
		// * [1] = latitud
		double[] coordenadas = new double[2];
 		
		GruposDataBase  gruposDataBaseHelper = new GruposDataBase(context, "GruposDataBase", null, 1);
		SQLiteDatabase gruposDataBase = gruposDataBaseHelper.getReadableDatabase();
		
		if(snippet != null){
			
			selectGrupo = "SELECT PG_LONGITUD, PG_LATITUD FROM PERSONAL_GRUPOS WHERE PG_PER_ID = ? ";
			parametros = new String[]{snippet};
		}else{
			selectGrupo = "SELECT USU_LONGITUD, USU_LATITUD FROM USUARIO ";
			parametros = null;
		}
			
		try{
			if(gruposDataBase != null){
				Cursor cursor = gruposDataBase.rawQuery(selectGrupo, parametros);
	
				if(cursor.moveToFirst()){
					do{
						longitud = cursor.getDouble(0);
						latitud = cursor.getDouble(1);
						coordenadas[0] = longitud;
						coordenadas[1] = latitud;
					}while(cursor.moveToNext());
				}
				gruposDataBase.close();
			}			
		
		}catch (Exception e) {
			System.out.println("Excepcion en obtenerCoordenadas: " + e.getMessage());
		}
		
		return coordenadas;
	}
	
	/**
	 * Metodo con el que obtenemos las coordenadas del evento en el que hemos picado, las coordenadas
	 * se obtienen de l BB.DD
	 * @param snippet
	 * @return
	 */
	public double[] obtenerCoordenadasEvento(String snippet, Context context){
		//Consultamos a la BB.DD la latitud y longitud de la persona del grupo en la que hemos pinchado.
		double longitud = 0;
		double latitud = 0;	
		String selectEvento = null;
		String[] parametros = null;
		
		// * [0] = longitud
		// * [1] = latitud
		double[] coordenadas = new double[2];
 		
		GruposDataBase  gruposDataBaseHelper = new GruposDataBase(context, "GruposDataBase", null, 1);
		SQLiteDatabase gruposDataBase = gruposDataBaseHelper.getReadableDatabase();
			
		selectEvento = "SELECT EV_LONGITUD, EV_LATITUD FROM EVENTOS WHERE _id = ? ";
		parametros = new String[]{snippet};
			
		try{
			if(gruposDataBase != null){
				Cursor cursor = gruposDataBase.rawQuery(selectEvento, parametros);
	
				if(cursor.moveToFirst()){
					do{
						longitud = cursor.getDouble(0);
						latitud = cursor.getDouble(1);
						coordenadas[0] = longitud;
						coordenadas[1] = latitud;
					}while(cursor.moveToNext());
				}
				gruposDataBase.close();
			}			
		
		}catch (Exception e) {
			System.out.println("Excepcion en obtenerCoordenadas: " + e.getMessage());
		}
		
		return coordenadas;
	}
	
	/**
	 * Metodo con el que obtenemos la descripcion del evento en el que hemos picado, el evento
	 * se obtienen de la BB.DD
	 * @param snippet
	 * @return
	 */
	public String obtenerDescripcionEvento(String snippet, Context context){
		
		String  descripcion = null;
		String selectEvento = null;
		String[] parametros = null;
 		
		GruposDataBase  gruposDataBaseHelper = new GruposDataBase(context, "GruposDataBase", null, 1);
		SQLiteDatabase gruposDataBase = gruposDataBaseHelper.getReadableDatabase();
			
		selectEvento = "SELECT EV_DESCRIPCION FROM EVENTOS WHERE _id = ? ";
		parametros = new String[]{snippet};
			
		try{
			if(gruposDataBase != null){
				Cursor cursor = gruposDataBase.rawQuery(selectEvento, parametros);
	
				if(cursor.moveToFirst()){
					do{
						descripcion = cursor.getString(0);
					}while(cursor.moveToNext());
				}
				gruposDataBase.close();
			}			
		
		}catch (Exception e) {
			System.out.println("Excepcion en obtenerDescripcionEvento: " + e.getMessage());
		}
		
		return descripcion;
	}
	
	/**
	 * Metodo que usamos para parsear las coordenadas que obtenemos del WebService.
	 * @return
	 */
	public List<Object[]> trataCoordenadas(String coordenadas){
		List<Object[]> listaCoordenadas = new ArrayList<Object[]>();
		Object[] array1 = new Object[3];
		Object[] array2 = new Object[3];
		Object[] array3 = new Object[3];
		Object[] array4 = new Object[3];
		Object[] array5 = new Object[3];
		Object[] array6 = new Object[3];
		Object[] array7 = new Object[3];
		Object[] array8 = new Object[3];
		
		String[] arrayCoordenadas = coordenadas.split("@");
		
		array1[0] = arrayCoordenadas[0]; //Numero telefono
		array1[1] = Double.valueOf(arrayCoordenadas[1]); //Longitud
		array1[2] = Double.valueOf(arrayCoordenadas[2]); //Latitud
		
		listaCoordenadas.add(array1);
		
		array2[0] = arrayCoordenadas[3];
		array2[1] = Double.valueOf(arrayCoordenadas[4]);
		array2[2] = Double.valueOf(arrayCoordenadas[5]);
		
		listaCoordenadas.add(array2);
		
		array3[0] = arrayCoordenadas[6];
		array3[1] = Double.valueOf(arrayCoordenadas[7]);
		array3[2] = Double.valueOf(arrayCoordenadas[8]);
		
		listaCoordenadas.add(array3);
		
		array4[0] = arrayCoordenadas[9];
		array4[1] = Double.valueOf(arrayCoordenadas[10]);
		array4[2] = Double.valueOf(arrayCoordenadas[11]);
		
		listaCoordenadas.add(array4);
		
		array5[0] = arrayCoordenadas[12];
		array5[1] = Double.valueOf(arrayCoordenadas[13]);
		array5[2] = Double.valueOf(arrayCoordenadas[14]);
		
		listaCoordenadas.add(array5);
		
		array6[0] = arrayCoordenadas[15];
		array6[1] = Double.valueOf(arrayCoordenadas[16]);
		array6[2] = Double.valueOf(arrayCoordenadas[17]);
		
		listaCoordenadas.add(array6);
		
		array7[0] = arrayCoordenadas[18];
		array7[1] = Double.valueOf(arrayCoordenadas[19]);
		array7[2] = Double.valueOf(arrayCoordenadas[20]);
		
		listaCoordenadas.add(array7);
		
		array8[0] = arrayCoordenadas[21];
		array8[1] = Double.valueOf(arrayCoordenadas[22]);
		array8[2] = Double.valueOf(arrayCoordenadas[23]);
		
		listaCoordenadas.add(array8);
		
		return listaCoordenadas;
	}
	
	/**
	 * Metodo que usamos para parsear los nuevos eventos que obtenemos del WebService.
	 * @return
	 */
	public List<Object[]> trataEventos(String eventos){
		List<Object[]> listaEventos = new ArrayList<Object[]>();
		Object[] array = new Object[6];
		
		String[] arrayEventos = eventos.split("@");
		
		array[0] = arrayEventos[0]; //Nombre
		array[1] = Double.valueOf(arrayEventos[1]); //Longitud
		array[2] = Double.valueOf(arrayEventos[2]); //Latitud
		array[3] = Long.valueOf(arrayEventos[3]);//GRUPO_ID
		array[4] = arrayEventos[4];//Numero del creador
		array[5] = arrayEventos[5];//Descripcion
		
		listaEventos.add(array);
		
		return listaEventos;
	}
	
	public Long obtenerIdFotoCreadorEvento(String idEvento, Context context){
		
		Long idCreador = null;
		String selectEvento = null;
		String[] parametros = null;
 		
		GruposDataBase  gruposDataBaseHelper = new GruposDataBase(context, "GruposDataBase", null, 1);
		SQLiteDatabase gruposDataBase = gruposDataBaseHelper.getReadableDatabase();
			
		selectEvento = "SELECT EV_CREADOR_ID FROM EVENTOS WHERE _id = ? ";
		parametros = new String[]{idEvento};
			
		try{
			if(gruposDataBase != null){
				Cursor cursor = gruposDataBase.rawQuery(selectEvento, parametros);
	
				if(cursor.moveToFirst()){
					do{
						idCreador = cursor.getLong(0);
					}while(cursor.moveToNext());
				}
				gruposDataBase.close();
				gruposDataBaseHelper.close();
				cursor.close();
			}			
		
		}catch (Exception e) {
			System.out.println("Excepcion en obtenerIdFotoCreadorEvento: " + e.getMessage());
		}
		
		return idCreador;
	}
	
	public Long obtenerIdContactoCreadorEvento(String numeroTelefono, Context context){
		
		Long idCreador = null;
 		Cursor myCursor = null;
			
		try{
			myCursor = context.getContentResolver().query(
					  Data.CONTENT_URI, new String[] { Data.CONTACT_ID},
					  Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "' AND " + Phone.NUMBER + " = '" + numeroTelefono + "'" 
					  , null, Data.DISPLAY_NAME + " ASC ");
			
			if(myCursor.moveToFirst()){
				do {
					idCreador = myCursor.getLong(0);					
				} while (myCursor.moveToNext());
			}
		
		}catch (Exception e) {
			System.out.println("Excepcion en obtenerIdContactoCreadorEvento: " + e.getMessage());
		}
		
		return idCreador;
	}
	
	public Long obtenerIdCreadorEvento(String idEvento, Context context){
		
		GruposDataBase  gruposDataBaseHelper = new GruposDataBase(context, "GruposDataBase", null, 1);
		SQLiteDatabase gruposDataBase = gruposDataBaseHelper.getReadableDatabase();
			
		String selectEvento = "SELECT EV_CREADOR_ID FROM EVENTOS WHERE _id = ? ";
		String[] parametros = new String[]{idEvento};
		Long idCreador = null;
			
		try{
			if(gruposDataBase != null){
				Cursor cursor = gruposDataBase.rawQuery(selectEvento, parametros);
	
				if(cursor.moveToFirst()){
					do{
						idCreador = cursor.getLong(0);
					}while(cursor.moveToNext());
				}
				gruposDataBase.close();
				gruposDataBaseHelper.close();
				cursor.close();
			}			
		
		}catch (Exception e) {
			System.out.println("Excepcion en obtenerIdCreadorEvento: " + e.getMessage());
		}
		
		return idCreador;
	}
}
